/*
 * TinyWiki base - v0.1.2
 *  Copyright 2010 - 2011, itozyun
 *  Released under the MIT, BSD, and GPL Licenses.
 */

var tinyWiki = (function(){
	var ua = (function(){
		var acme = {};
		var n = navigator;
		var dua = n.userAgent;
		var dav = n.appVersion;
		var tv = parseFloat(dav);
		acme.isOpera = (dua.indexOf("Opera") >= 0) ? tv: undefined;
		acme.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : undefined;
		acme.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined;
		acme.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined;
		var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);
		if(index && !acme.isChrome){
			acme.isSafari = parseFloat(dav.split("Version/")[1]);
			if(!acme.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){
				acme.isSafari = 2;
			}
		}
		if(document.all && !acme.isOpera){
			acme.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;
		}
		
		return acme;
	})();
	
	var e = document.getElementById( 'scriptsUrlBase');
	var scriptUrl = ( e.src && e.src.match( /http:/)) ? e.src.replace( /data\/tinyWiki.js/, '') : '';
		
	return {
		init: function(){
			if( window.name == 'close' || document.URL.match(/htmlGenClose/)){
				try {
					window.parent.tinyWiki.save.close();
				} catch(e){	}				
			} else if( document.URL.match(/htmlGenProxy/)) {
				try {
					window.name = window.parent.tinyWiki.save.getHtml();
					//alert( window.name)
					window.location.replace( tinyWiki.htmlGenUrl +'#' + encodeURIComponent( document.URL));
					
				} catch(e){	}
			} else {
				tinyWiki.core.init();
				delete tinyWiki.init;
			}
		},
		htmlGenUrl:		'http://gadget-os.googlecode.com/svn/tinywiki/data/htmlGenerator.htm',
		ua:	ua,
		jqueryUrl:		scriptUrl +'data/jquery-1.4.4.min.js',
		jQindentUrl:	scriptUrl +'data/jquery.indent-1.2.min.js',
		libUrls:	[
						scriptUrl +'data/jquery-ui-1.8.10.custom.min.js',
						scriptUrl +'data/nicEdit.js'						
					],
		editorCssUrl:	scriptUrl +'data/tinyWiki_edit.css'
	}
})();

tinyWiki.util = (function(){
	var el, idoc, extDomain;
	
	return {
		stringify: function( obj){
			var ret = [];
			for( key in obj){
				ret.push( key + ':' +escape( obj[ key]));
			}
			return ret.join( ',');
		},
		parse: function(){
			
		},
		iframeProxy: function( id){
			el = document.createElement( tinyWiki.ua.isIE ? '<iframe name="' + id + '" frameborder="0" scrolling="no">' : 'iframe');

			el.id = el.name = id;
			el.setAttribute( 'name', id);
			el.allowtransparency = 'true';
			el.scrolling = 'no';
			
			$( '#iframeContainer').append( el);
			window[id] = el;

			if( tinyWiki.ua.isIE){
				el.onreadystatechange = function(){
					if ( this.readyState == "complete") {
						el.onreadystatechange = tinyWiki.core.emptyFnc;
						el.onreadystatechange = null;					

						try {
							idoc = el.contentWindow.document; // ie8でel.onreadystatechangeがクリアされず、他ドメインに遷移したときにも呼ばれてしまう。
							
							/* */
							idoc.open();
							idoc.writeln( [
								'<script type="text/javascript">',
									'window.name = window.parent.tinyWiki.save.getHtml();',
									'window.location.href = "' +window.parent.tinyWiki.htmlGenUrl +'";',
								'</script>'			
							].join( '')
							);
							idoc.close();						
						} catch(e){}
					}			
				};				
			} else { // opera
				idoc = el.contentWindow.document;
			
				idoc.open();
				idoc.writeln( [
					'<script type="text/javascript">',
						'window.name = window.parent.tinyWiki.save.getHtml();',
						'window.location.href = "' +window.parent.tinyWiki.htmlGenUrl +'";',
					'</script>'			
				].join( '')
				);
				idoc.close();
			}
		}
	}
})();

// ---------------------------------------------------
// tinyWiki core
//
	tinyWiki.core = (function(){
		var focusID;
		
		function targetID(){
			var ret = location.hash;
			focusID = document.getElementById( ret.replace( /#/, '')) ? ret : changeFocus();
			return focusID;
		}
		
		function changeFocus( id){
			id = ( id || '').replace( /#/, '');
			if( id != ''){
				$( '#trash').find( 'a').each( function( i, el){
					if( $( this).attr( 'href') === '#' +id){
						id = '';
						return false;
					}
				});
			}
			if( id == '' || !document.getElementById( id)){
				if( $( '#sitemap li:eq(0)').attr( 'id') !== 'trash-li'){
					id = $( '#sitemap a:eq(0)').attr( 'href') ? $( '#sitemap a:eq(0)').attr( 'href').slice( 1) : '';
				}
			}		
			focusID = document.location.hash = '#' +id;
			
			if( id != ''){
				$( '#content-control').css( { display: 'block'})
			}
			
			hilight();
			return id;
		}
	
		function hilight(){
			$( '#sitemap dl').css({
				backgroundColor: ''
			});
			if( focusID != '#'){
				$( '#sitemap a').each( function ( i, el){
					if( $( this).attr( 'href') === focusID){
						$( this).parent().parent().css( {
							backgroundColor: '#ddf'
						});
						return false;			
					}
				});			
			}
		}
		
		function setToggle( expander, ncr){ //Numeric character reference
			var li = $( expander).parent().parent();
			if( $( li).find( 'li').length > 0){
				$( expander).text(
					$( li).hasClass( 'sm_liOpen') ?
						( ncr ? '&#9660;' : String.fromCharCode( 9660)) :
						( ncr ? '&#9658;' : String.fromCharCode( 9658))
				);
			} else {
				$( expander).text( '');
			}
		}
	
		return {
			getFocusID: function(){
				return focusID;
			},
			setFocus: function( id){
				changeFocus( id);
			},
			init: function(){
				tinyWiki.core.jsLoader( tinyWiki.core.jqLoadComplete, tinyWiki.jqueryUrl);
				delete tinyWiki.core.init;
			},
			hilight: function(){
				hilight();
			},
			setToggle: function( expander, ncr){
				setToggle( expander, ncr);
			},
			updateToggle: function( ncr){
				$( '#sitemap .sm_expander').each( function( i, el){
					setToggle( this, ncr);
				});
			},
			emptyFnc: function(){},
			loadEditor: function(){
				var urls = tinyWiki.libUrls;			
				function loadCntrol(){
					tinyWiki.core.jsLoader( ( urls.length == 1) ? tinyWiki.core.loadEditorComplete : loadCntrol, urls.shift());
				}
				loadCntrol();
			},
			jqLoadComplete: function(){
				setTimeout( function(){
					if( !!window.jQuery){
						tinyWiki.core.updateToggle( false);
						
					// expand	
						$( '#sitemap .sm_expander').live( 'click', function() {
							$( this).parent().parent().toggleClass( 'sm_liOpen').toggleClass( 'sm_liClosed');
							setToggle( this, false);
						});
					
					// click focus
						$( '#sitemap a').live( 'click', function() {
							changeFocus( $( this).attr( 'href').slice( 1));
							return false;
						});

					// hilight
						focusID = targetID();
						setTimeout( hilight, 0);

					// jQuery.indent
						tinyWiki.core.jsLoader( tinyWiki.core.jQindentLoadComplete, tinyWiki.jQindentUrl);

					// css
						var link = document.createElement('link');
						with( link ) {
							href = tinyWiki.editorCssUrl;
							type = 'text/css';
							rel = 'stylesheet';
						}
						var head = document.getElementsByTagName('head')[ 0];
						head.appendChild(link);
						
						delete tinyWiki.core.jqLoadComplete;
					} else {
						setTimeout( arguments.callee, 333);
					}
				}, 333);
			},
			jQindentLoadComplete: function(){
				setTimeout( function(){
					if( !!window.jQuery.indent){
					//　Edit, getHtml Click
						tinyWiki.dom.init();
						$( '#editWiki').click( function() {
							if( tinyWiki.core.loadEditor){
								tinyWiki.core.loadEditor();						
								$( '#editWiki').text( 'SITE');
							}
						});
						
						tinyWiki.save.init();
						delete tinyWiki.save.init;
					
						delete tinyWiki.core.jQindentLoadComplete;
					} else {
						setTimeout( arguments.callee, 333);
					}
				}, 333);
			},
			loadEditorComplete: function(){
				setTimeout( function(){
					if( !!jQuery.indent){
						tinyWiki.dom.build();
						delete tinyWiki.dom;
						
						tinyWiki.edit.init();
						delete tinyWiki.edit.init;
						
						tinyWiki.pad.init();
						delete tinyWiki.pad.init;
	
						tinyWiki.site.init();
						delete tinyWiki.site.init;
						
						delete tinyWiki.core.loadEditor;
						delete tinyWiki.core.jsLoader;
						delete tinyWiki.core.loadEditorComplete;
					} else {
						setTimeout( arguments.callee, 333);
					}
				}, 333);
			},
			jsLoader: function ( callback, src){
				var sc = document.createElement('script');
				document.body.appendChild( sc);
				sc.type = 'text/javascript';
				if ( tinyWiki.ua.isIE) {
					sc.onreadystatechange = function(){
						if (sc.readyState == 'complete' || sc.readyState == 'loaded') {
							setTimeout( callback, 0);
							sc.onreadystatechange = tinyWiki.core.emptyFnc;
						}
					};
				} else {
					sc.onload = function(){
						setTimeout( callback, 0);
					};
				}
				sc.src = src;
			}
		}
	})();

	tinyWiki.dom = (function(){
			var embed = [
				{
					id:		'#header',
					method:	'before',
					html:	[
						'<div id="wiki-control">',
							'<div id="editWiki" class="button button-1st">EDIT</div>',
							'<div id="dlBtnShadow" class="button button-last">&nbsp;</div>',
							'<div id="iframeContainer">&nbsp;</div>',
						'</div>'
					]
				},
				{
					id: '#left',
					method: 'append',
					html: [
						'<div id="navi-control">',
							'<div id="addNewPage" class="button">+ NEW PAGE</div>',
						'</div>'
					]
				},
				{
					id:	'body',
					method: 'append',
					html: [
						'<ul id="origin" style="display:none;">',
					        '<li>',
								'<dl>',
									'<dt><a></a></dt>',
								'</dl>',
					        '</li>',
						'</ul>'
					]
				},
				{
					id:	'body',
					method: 'append',
					html: [
						'<div id="wikiEditor" class="PopupContainer" style="display:none;">',
							'<div class="PopupWrapper" style="width:600px;">',
							'<!--[if lt IE 9]><table height="100%"><tr><td align="center" valign="middle"><![endif]-->',
								'<div class="PopupContent">',
									'<form>',
										'<label for="editWikiTitle" class="form-item">Wiki Title:',
											'<input id="editWikiTitle" type="text" class="textInput" />',
										'</label>',
										'<label for="editWikiTitleLink" class="form-item">Title Link:',
											'<input id="editWikiTitleLink" type="text" class="textInput" />',
										'</label>',
										'<div>',
											'<div id="setPublishBtn" class="button">pubish</div>',
											'<div id="setCancelBtn" class="button">cancel</div>',
										'</div>',
									'</form>',
								'</div>',		
							'<!--[if lt IE 9]></td></tr></table><![endif]-->',
							'</div>',
						'</div>'
					]
				},
				{
					id:	'body',
					method: 'append',
					html: [
						'<div id="pageEditor" class="PopupContainer" style="display:none;">',
							'<div class="PopupWrapper" style="width:600px;">',
							'<!--[if lt IE 9]><table height="100%"><tr><td align="center" valign="middle"><![endif]-->',
								'<div class="PopupContent">',
									'<form>',
										'<label for="editTitle" class="form-item">Page Title:',
											'<input id="editTitle" type="text" class="textInput" />',
											'<span id="editorErrTitle" class="editorErrMsg"></span>',
										'</label>',
										'<label for="editID" class="form-item">Page ID:',
											'<input id="editID" type="text" class="textInput" />',
											'<p id="editorErrID" class="editorErrMsg"></p>',					
										'</label>',
										'<div class="form-item">',
											'<textarea id="editContent" cols="80" rows="15"></textarea>',
										'</div>',
										'<div>',
											'<div id="publishBtn" class="button">pubish</div>',
											'<div id="cancelBtn" class="button">cancel</div>',
										'</div>',	
									'</form>',
								'</div>',			
							'<!--[if lt IE 9]></td></tr></table><![endif]-->',
							'</div>',
						'</div>'
					]
				},
				{
					id:		'#content',
					method:	'before',
					html:	[
						'<div id="content-control" style="display:none;">',
							'<div id="editPage" class="button button-1st">EDIT</div>',
							'<div id="delPage" class="button button-last">DEL</div>',
						'</div>'
					]
				}
			]
			function insertDom(){
				var obj = embed.shift();
				$( obj.id)[ obj.method]( $( obj.html.join( '')));					
			}		
			
			return {
				init: function(){
					insertDom();
				},
				build: function(){
					while ( embed.length > 0){
						insertDom();
					}				
				}
			}
	})();

// ---------------------------------------------------
// tinyWiki edit
//
	tinyWiki.edit = function(){
		function initItem( newEl){
			newEl = $( newEl);
		// add .dropzone
			var dl = $( newEl).children( 'dl');
			if( dl.find( '.dropzone').length == 0){
				dl.prepend('<dd class="dropzone"></dd>');
			}
		// add toggle
			if( dl.find( '.sm_expander').length == 0){
				dl.children( 'dt').before('<dd class="sm_expander"></dd>');
			}
		// drop
			$( newEl).children( 'dl').children( 'dt,.dropzone').droppable({
		        accept: '#sitemap li',
		        tolerance: 'pointer',
		        drop: function( e, ui) {
		            var li = $( this).parent().parent();
		            var child = !$( this).hasClass( 'dropzone');
		            if ( child && li.children( 'ul').length == 0) {
		                li.append( '<ul/>');
		            }
		            if ( child) {
		                li.addClass( 'sm_liOpen').removeClass( 'sm_liClosed').children( 'ul').append( ui.draggable);
		            } else {
		                li.before( ui.draggable);
		            }
					$( '#sitemap li.sm_liOpen').not( ':has(li:not(.ui-draggable-dragging))').removeClass( 'sm_liOpen');
		            li.children( 'dl').find( 'dt,.dropzone').css({ backgroundColor: ''});
					
					tinyWiki.core.setFocus();
					setTimeout( function(){
						tinyWiki.core.updateToggle( false);
					}, 0);
		        },
		        over: function() {
		            $( this).filter( 'dt').css( { backgroundColor: '#ccc' });
		            $( this).filter( '.dropzone').css( { backgroundColor: '#aaa' });
		        },
		        out: function() {
		            $( this).css( { backgroundColor: '' });
		        }
		    });
			
		// drag
			if( newEl.attr( 'id') != 'trash-li'){
				newEl.draggable({
			        handle: ' > dl',
			        opacity: .8,
			        addClasses: false,
			        helper: 'clone',
			        zIndex: 100// ,start: function(e, ui) {}
			    });				
			}
		}
		
		function getLi(){
			var ret;
			var id = tinyWiki.core.getFocusID();
			$( '#sitemap a').each( function ( i, el){
				if( $( this).attr( 'href') === id){
					ret = $( this).parent().parent().parent();
					return false;
				}
			});
			return ret;
		}
		
		return {
			init: function(){
			// drag drop
			    $('#sitemap li').each( function( i, el){ initItem( this)});
			
			// add Item
				$('#addNewPage').click( function(){
					tinyWiki.pad.popup( 'newTitle', 'id', 'content', false);
					tinyWiki.edit.beforeJump( true);
				});
			// delete Page
				$('#delPage').click( function(){
					var id = tinyWiki.core.getFocusID();
					if( id && id != '#' && $( id)) {
						var li = tinyWiki.edit.getLi();
						$(li).slideUp('normal', function(){// スライドして削除
							if (li.children('ul')) { // 子の繰上げ
								var ul = $(li).parent();
								var insIndex = $('li', ul).index(li);
								
								li.children('ul').children().each(function(i, el){
									if (ul.children('li').length - 1 > insIndex) {
										ul.children().eq(insIndex + i).after(el);
									} else {
										ul.append(el);
									}
								});
							}
							var ul = $(li).parent();// 子がliだけなら親のclassとulを削除
							if ($(ul).length == 1) {
								$(ul).parent().removeClass();
							}
							
							//$(li).draggable('destroy');// liからイベント削除
							//$(li).children('.dropzone').droppable('destroy');
							//$(li).remove();// liの削除
							//$( tinyWiki.getFocusID()).remove();//文書の削除
							
							if( $( '#trash').length == 0){
								$( '#sitemap').append( $( '<li id="trash-li"><dl><dt><span>[## trash ##]</span></dt></dl><ul id="trash"/></li>'));
								initItem( $( '#trash-li').addClass( 'sm_liOpen'));
							}
							$( '#trash').append( $(li).css( {display: ''}));
							
							//フォーカスの移動
							tinyWiki.core.setFocus();
							setTimeout( function(){
								tinyWiki.core.updateToggle( false);
							}, 0);
						});
					}
				});
				
				tinyWiki.core.updateToggle( false);
			},
			onPublished: function( title, id, content, isEdit){
				title = title.replace( /\s/g, '');
				id = id.replace( /\s/g, '');
				
				if( tinyWiki.edit.checkNewPage( title, id, isEdit)){
					if( !isEdit){
						var ins = getLi() || $( '#left');// insert position
						
				        if ( ins.children('ul').length == 0) {
				            ins.append('<ul/>');
				        }
						
						var updateEl = $( '#origin li').clone( true);
						if( ins.attr( 'id') === 'left' && ins.children('ul').children('li').length > 0){
							ins.addClass('sm_liOpen').removeClass('sm_liClosed');
							ins.children( 'ul').children( 'li').eq( 0).before( updateEl);
						} else {
							ins.addClass('sm_liOpen').removeClass('sm_liClosed').children('ul').append( updateEl);
						}
						
						
						initItem( updateEl);
						//
						
						$( '#content').append(
							'<div class="tinywiki-page" id="' +id +'">' +
							'<h2 class="page-title" /><div class="page-body" /></div>'
						);
					} else {
						var updateEl = getLi();
						$( tinyWiki.core.getFocusID()).attr( 'id', id); // case id != new id
					}
					
					$( updateEl).children( 'dl').children( 'dt').children( 'a').text( title).attr( {
						href: '#' + id
					}); // title href name
					
					$( '#' +id +'>.page-title').text( title);
					$( '#' +id +'>.page-body').html( content);
					
					tinyWiki.core.setFocus( id);
					setTimeout( function(){
						tinyWiki.core.updateToggle( false);
					}, 0);
					return true;
				} else {
					return false;
				}
			},
			checkNewPage: function( title, id, isEdit){
				var c = ( title && title != '');
				if( !c) $( '#editorErrTitle').text( 'タイトルを入力してください。');
				
				var msg = '';
				msg = ( id && id != '') ? '' : 'IDを入力してください';
				
				if( !isEdit){
					msg += !!document.getElementById( id) ? 'IDが重複しています。' : '';
				} else if( tinyWiki.core.getFocusID() != '#' +id){
					$( '#content').children().each( function(){
						if( $( this).attr( 'id') == id){
							msg += 'IDが重複しました。';
							return true;
						}
					});
				}
				msg += ( id.match( /[^\w:-]/)) ? '半角英数字と_-:以外は使えません。' : '';
				msg += ( id.match( /^[A-Za-z]/)) ? '' : '最初の文字はA-Za-zにしてください。';
				if( msg != ''){
					$( '#editorErrID').text( msg);
					c = false;
				}
				return  c;
			},
			getLi: function(){
				return getLi();
			},
			clean: function(){
				// 子のないliのclass削除
				// 空のul削除
				// pageの並び替えとh2-6の付け直し
				tinyWiki.core.updateToggle( false);
			},
			beforeJump: function( sw){
				if( sw){
					if( !window.onbeforeunload){
						window.onbeforeunload = function( e){
							e = e || window.event;
							return e.returnValue = '編集中ですが移動してよいですか？';
						}
					}
				} else {
					window.onbeforeunload = function(){};
					window.onbeforeunload = undefined;
				}
			}
		}
	}();

// ---------------------------------------------------
// tinyWiki pad
//
	tinyWiki.pad = (function(){
		var editor, isEdit;
		
		function close(){
			$( '#pageEditor').css( { display: 'none'});
			tinyWiki.save.setData();
		}
		
		return {
			init: function(){
			// edit Page
				$( '#editPage').click( function(){
					var id = tinyWiki.core.getFocusID();
					if( id && id != '#' && $( id)){
						tinyWiki.pad.popup( $( id +'>.page-title').text(), id.slice( 1), $( id +'>.page-body').html(), true);
					}
				});
			},
			popup: function( title, id, content, _isEdit){
				$( '#pageEditor').css( { display: tinyWiki.ua.isIE ? 'block' : 'table'});
				if( editor === undefined){
					editor = new nicEditor( { fullPanel: true}).panelInstance( 'editContent');
					$( '#publishBtn').click( function(){
						tinyWiki.pad.eraceErrMsg();
						//editor.saveContent();
						if( tinyWiki.edit.onPublished(
								$( '#editTitle').val(),
								$( '#editID').val(),
								editor.instanceById('editContent').getContent(),
								isEdit
							)
						){
							close();
						}
					});
					$( '#cancelBtn').click( close);
				}
				$( '#editTitle').val( title);
				$( '#editID').val( id);
				$( '#editContent').val( content);
				isEdit = _isEdit;
				editor.instanceById('editContent').setContent( content);
				
				tinyWiki.pad.eraceErrMsg();
			},
			eraceErrMsg: function(){
				$( '#editorErrTitle').text( '');
				$( '#editorErrID').text( '');				
			}
		}
	})();

// ---------------------------------------------------
// tinyWiki site
//
	tinyWiki.site = (function(){
		function close(){
			$( '#wikiEditor').css( { display: 'none'});
		}
		
		return {
			init: function(){
			// edit Wiki
				$( '#editWiki').click( function(){
					tinyWiki.site.setting();
				});
				
				$( '#setPublishBtn').click( function (){
					close();
					var title = $( '#editWikiTitle').val();
					$( 'h1 > a').text( title).attr( {
							href: $( '#editWikiTitleLink').val(),
							target: '_brank'
						}
					);
					try{ // ieではエラーになる
						$( 'title').text( title);
					} catch(e){}
					
				});
				$( '#setCancelBtn').click( close);

			},
			setting: function(){
				$( '#editWikiTitle').val( $( 'h1 > a').text());
				$( '#editWikiTitleLink').val( $( 'h1 > a').attr( 'href'));
				$( '#wikiEditor').css( { display: tinyWiki.ua.isIE ? 'block' : 'table'});
			}
		}
	})();

// ---------------------------------------------------
// tinyWiki save
//
	tinyWiki.save = (function(){
		var html;
		var iframeID = 'xdmainFrame';

		function buildData( li, depth){
			var ret = '';
			var a = $( li).children( 'dl').find( 'dt>a');
			var id = a.attr( 'href') ? a.attr( 'href').split( '#')[ 1] : null;

			if( id){
				var ul = $( li).children( 'ul');
				var hasChild = ul.children( 'li') ? ( ul.children( 'li').length > 0) : false;		
				
				var page = $( '#' +id);
				html.pages += insertTab( [
					'<div class="tinywiki-page" id="' +id +'">',
					'\t<h' + depth +' class="page-title">' +a.text() +'</h' + depth +'>',
					'\t<div class="page-body">',
					insertTab( page.children( '.page-body').indent().replace( / style=""| class=""| aria-level="\d*?"| aria-posinset="\d*?"| aria-setsize="\d*?"| value="\d*?"| sizcache="\d*?"| sizset="\d*?"| start="\d*?"/gi, ''), 2),
					'\t</div>',
					'\t<div class="page-timestamp">',
					'\t</div>',
					'</div>'
				].join( '\n'), 5) +'\n';				
				
				if( hasChild){
					ret = [
						'<li class="sm_liOpen">',
						'\t<dl>' ,
						'\t\t<dd class="sm_expander">&#9660;</dt>',
						'\t\t<dt><a href="#' + id +'">' +a.text() +'</a></dt>',
						'\t</dl>',
						'\t<ul>',
						( function(){
							var el = '';
							ul.children( 'li').each( function(){
								el += buildData( this, ( depth > 5 ? 6 : depth +1));// insertTab( , 2)
							})
							return insertTab( el, 1);
						})(),
						'\t</ul>',
						'</li>'
					].join( '\n');
				} else {
					ret = [
						'<li>',
						'\t<dl><dt><a href="#' + id +'">' +a.text() +'</a></dt></dl>',
						'</li>'
					].join( '\n');
				}
				
				ret = insertTab( ret, 1) +'\n';
			}
			return ret;
		}
		
		function insertTab( str, n){
			var t = '';
			for ( var i=0; i < n; i++) { t += '\t'};
			return t +str.replace( /\n/g, function(){ return '\n' +t});
		}

		return {
			init: function(){
				tinyWiki.save.setData();
			},
			setData: function(){			
				html = {};
				html.title = $( 'h1>a').text();
				html.fileName = html.title +'.html';
				
				// sitemap
				var sitemap = $( '#sitemap').clone( true);
				sitemap.find( '#trash-li').remove();
				
				html.pages = '';
				html.sitemap = insertTab( (function(){
					var ret = '';
					sitemap.children( 'li').each( function( i, el){
						ret += buildData( this, 2);
					});
					return ret;
				})() +'\t', 4); 
				html.pages += '\t\t\t\t\t';

				//
				html.h1 = '\t\t\t\t' +$( '<p>').append( $( 'h1>a').clone( true)).html() +'\n\t\t\t';
				
				var path = location.pathname;
				path = path.match( /#/) ? path.replace( /#.*/, '') : path;
				var ary = path.split( '\/');
				var url = ary[ ary.length -1];
				
				$.get( url, null, function( res){
					if( res){
						html.base = res;
						$( '#' +iframeID).remove();
						tinyWiki.util.iframeProxy( iframeID);						
					}
				});
			},
			getHtml: function(){
				return tinyWiki.util.stringify( html);
			}
		}
	})();

tinyWiki.init();

